package com.jintian.smart.kernel.core.flow;

import java.io.Closeable;

public interface IProcessContext<T> extends Closeable {

	String getProcess();

	String getActivity();

	FlowAction getAction();

	// /**
	// * 执行者
	// *
	// * @return
	// */
	// AuthenticatedUser getExecutor();
	//
	// /**
	// * 代理人
	// *
	// * @return
	// */
	// AuthenticatedUser getAgent();

	/**
	 * 关联业务ID
	 * 
	 * @return
	 */
	String getBusinessKey();

	/**
	 * 当前流程实例ID
	 * 
	 * @return
	 */
	String getProcessInstanceId();

	String getProcessLabel();

	/**
	 * 当前任务实例ID
	 * 
	 * @return
	 */
	String getTaskId();

	/**
	 * 添加流程执行变量
	 * 
	 * @param key
	 * @param value
	 */
	void putVariable(String key, Object value);

	boolean containsVariable(String key);

	/**
	 * 添加流程执行本地变量
	 * 
	 * @param key
	 * @param value
	 */
	void putLocalVariable(String key, Object value);

	/**
	 * 添加流程执行非持久变量
	 * 
	 * @param key
	 * @param value
	 */
	void putTransientVariable(String key, Object value);

	/**
	 * 添加流程执行非持久本地变量
	 * 
	 * @param key
	 * @param value
	 */
	void putTransientLocalVariable(String key, Object value);

	ProcessControl getProcessControl();

	boolean isProcessFinished();

	/**
	 * 执行结果
	 * 
	 * @return
	 */
	T getResult();

	String getOperatorId();

	String getOperatorName();

	boolean isAgent();

	void updateBusinessStatus(String status);

	<E> E getAttribute(String name, Class<E> clazz);

	void setAttribute(String name, Object value);

	IFlowRuntime getFlowRuntime();
}
